package com.culturalCenter.dataCenter.mapper.user;

import com.culturalCenter.dataCenter.customEntity.user.CustomUserRecent;
import com.culturalCenter.dataCenter.entity.user.*;
import com.culturalCenter.dataCenter.mapper.base.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserActivityMapper extends BaseMapper<UserActivity> {

    /**
     * 通过用户id查询
     *
     * @param userId 用户id
     *
     * @return
     */
    List<UserActivity> queryByUserId(@Param("userId") String userId);

    /**
     * 查询最近5条活动/培训记录
     *
     * @param userId
     *
     * @return
     */
    @Select("SELECT a.activityName, a.activityType, a.beginTime, a.endTime FROM `cdc_user_activity` a WHERE userId = #{userId} ORDER BY beginTime DESC LIMIT 5")
    List<CustomUserRecent> findCustomUserRecent(@Param("userId") String userId);

    /**
     * 批量插入数据
     *
     * @param userActivityList
     */
    void insertBatch(@Param("userActivityList") List<UserActivity> userActivityList);

    /**
     * 根据用户和报名类型分类
     *
     * @return
     */
    List<UserActivitySignUpType> countByActivityType();

    /**
     * 根据用户和报名活动内容分类
     *
     * @return
     */
    List<UserActivitySignUpContentType> countByContentType();

    /**
     * 统计用户活动参与的各类型数量
     *
     * @return
     */
    List<UserActivityCount> countActivityNum();

    /**
     * 根据用户统计活动和培训数量
     *
     * @return
     */
    List<UserInfoCount> countActivityAndTrainNum();

    /**
     * 根据用户分组查询最近到现场时间和最近参加活动时间
     *
     * @return
     */
    List<UserInfoCount> selectRecentActivity();

    /**
     * 查询用户的活动签到记录
     *
     * @param userLocationTime
     *
     * @return
     */
    List<UserLocation> selectActivityLocation(@Param("userLocationTime") long userLocationTime);

    /**
     * 查询培训的签到记录
     *
     * @param userLocationTime
     *
     * @return
     */
    //    t.signInStartTime,t.signInEndTime数据库找不到字段，不知道怎么搞
    //    @Select("SELECT ua.userId,ua.activityId,ua.objRoundId activityRoundId,ua.activityName,ua.activityType,s.`code` siteCode,s.location,ua.signInSource locationType,ua.signTime locationTime, t.signInStartTime,t.signInEndTime,u.phone FROM " +
    List<UserLocation> selectTrainLocation(@Param("userLocationTime") long userLocationTime);

    /**
     * 查询报名/签到记录
     *
     * @param activityLogTime
     *
     * @return
     */
    List<UserActivityLog> selectRegisterTime(@Param("activityLogTime") long activityLogTime);

    /**
     * 查询活动开始、结束时间
     *
     * @param activityLogTime
     *
     * @return
     */
    List<UserActivityLog> selectActivityTime(@Param("activityLogTime") long activityLogTime);

    /**
     * 查询活动报名时间
     *
     * @param activityLogTime
     *
     * @return
     */
    List<UserActivityLog> selectActivityRegisterTime(@Param("activityLogTime") long activityLogTime);

    /**
     * 查询培训报名时间
     *
     * @param activityLogTime
     *
     * @return
     */
    List<UserActivityLog> selectTrainRegisterTime(@Param("activityLogTime") long activityLogTime);

    /**
     * 查询签到时间
     *
     * @param activityLogTime
     *
     * @return
     */
    List<UserActivityLog> selectActivitySignInTime(@Param("activityLogTime") long activityLogTime);

    /**
     * 查询用户浏览时间
     *
     * @param activityLogTime
     *
     * @return
     */
    List<UserActivityLog> selectBrowsingTime(@Param("activityLogTime") long activityLogTime);

    /**
     * 查询培训开始、结束时间
     *
     * @param activityLogTime
     *
     * @return
     */
    List<UserActivityLog> selectTrainingTime(@Param("activityLogTime") long activityLogTime);

}
